package com.xymtop.sqlcater.core.sql.sqlparser.tosql.life;

import com.xymtop.sqlcater.core.sql.sqlparser.tosql.entity.sql.AppContent;
import com.xymtop.sqlcater.core.sql.sqlparser.tosql.entity.sql.SqlNode;
import com.xymtop.sqlcater.core.sql.sqlparser.tosql.entity.sql.SqlNodeType;
import com.xymtop.sqlcater.core.sql.sqlparser.tosql.utils.AppContentUtil;
import lombok.Data;

import java.io.IOException;

//构建SQLnode
@Data
public class SqlNodeBuilder {
    //元素构建器
    private String nodeSql;

    //SQL节点
    private SqlNode sqlNode;

    public  SqlNodeBuilder  build() throws IOException {
        if(nodeSql!=null&&nodeSql!=""){
            sqlNode = new SqlNode();
            sqlNode.setName(nodeSql);
            sqlNode.setValue(nodeSql);


            //除去多余的引号
            String[] splitStr = nodeSql.split("\"");

            if(splitStr.length>0){
                nodeSql = splitStr[splitStr.length-1];
            }

            //判断是否为特殊字符串开头
            if(nodeSql.startsWith("@")){
                //@开头，为调用的集合
                sqlNode.setType(SqlNodeType.COLLECTION);
            }else if(nodeSql.startsWith("$")){
//                $为值
                sqlNode.setType(SqlNodeType.VALUE);
            }
//            else if(nodeSql.startsWith("#")){
//                //文档类型,先转SQL，再赋值给SQL
//                String name = nodeSql.substring(1,nodeSql.length());
//                AppContent appContent = AppContentUtil.appContentMap.get(name);
//
//                if(appContent==null){
//                    //为空再次构建
//                    AppContent app = new AppContent();
//                    String[] split = appContent.getPath().split(".");
//
//                    app.setPath(split[split.length-1]+name+".json");
//                    app.Start().buildSql();
//
//                    sqlNode.setValue(app.getSql());
//
//                }else {
//                    sqlNode.setValue(appContent.getSql());
//                }
//
//                sqlNode.setType(SqlNodeType.NORMAL);
//
//            }
            else {
                sqlNode.setType(SqlNodeType.NORMAL);

                //如果为正常字符串类型，直接赋值给SQL
                sqlNode.setSql(sqlNode.getValue());
            }

            //判断是否已经解析
            if(sqlNode.getSql()!=null){
                //已经解析
                sqlNode.setIsParse(true);
            }


        }
        return this;
    }

    public static SqlNodeBuilder add(String nodeSql){
        SqlNodeBuilder sqlNodeBuilder = new SqlNodeBuilder();
        sqlNodeBuilder.setNodeSql(nodeSql);
        return sqlNodeBuilder;
    }
}
